package com.yantong.service;

import com.yantong.pojo.Centre;
import com.yantong.pojo.MarketingGroup;
import com.yantong.pojo.JuheOrder;
import com.yantong.pojo.Order;
import com.yantong.pojo.Member;
import com.yantong.pojo.WorkOrder;

import java.math.BigDecimal;
import java.util.List;

/**
 * 订单支付服务
 *
 * @author kanghaixin
 * @date 2018/9/29.9:44
 */
public interface PayService {

	/**
	 * 刷新支付商户编号
	 *
	 * @param orderId 订单ID
	 * @return
	 */
	String refreshTradeNo(Long orderId);
//
	/**
	 * 根据订单ID+优惠券ID计算待支付金额
	 *
	 * @param payNo    支付ID
	 * @param integral 积分数
	 * @return
	 */
	double getPrePayAmount(Order order, Integer integral);

	/**
	 * 余额支付
	 *
	 * @param orderId  订单ID
	 * @param integral 积分数量
	 * @return
	 */
	int balancePay(String orderId, Integer integral);
	/**
	 * 微信支付
	 *
	 * @param orderId      订单ID
	 * @param payNo        微信支付单号
	 * @param integral     积分数
	 * @param procedureFee 手续费
	 * @return
	 */
	int wxPay(Long orderId, String payNo, String outTradeNo, Integer integral, Long procedureFee);

	void marketingSnapUpDispose(MarketingGroup marketingGroup, Order sgOrder);

	void yfzRefundDispose(String outTradeNo, JuheOrder juheOrder, Order order);

	/**
	 * 角色佣金计算和存储
	 *
	 * @param mid            用户id
	 * @param orderId        订单id
	 * @param orderProductId 订单商品id
	 * @param orderMoney     金额
	 * @param centreId       站点id
	 * @author liaozhaogui
	 * @date 2020/9/27 11:16
	 */
	void calculateCommission(Long mid, Long orderId, Long orderProductId, BigDecimal orderMoney, Long centreId);

	/**
	 * 拼团订单分佣
	 *
	 * @param orderId 订单id
	 * @author liaozhaogui
	 * @date 2020/12/9 16:26
	 */
	void marketingGroupCommission(Order order);

	/**
	 * 重置用户所属的推客或管家或主管
	 *
	 * @param relationId 所属关系的用户id
	 * @param userId     推荐人id
	 * @param memberList 所有用户集合
	 * @param role       需设置的所属角色
	 * @author liaozhaogui
	 * @date 2020/10/14 23:11
	 */
	void superiorRole(Long relationId, Long userId, List<Member> memberList, String role);

//	/**
//	 * 微信退款
//	 *
//	 * @param orderRefundId 申请退款记录ID
//	 * @param aid           操作人ID
//	 * @param aname         操作人
//	 * @return
//	 */
//	int wxRefund(Long orderRefundId, Long aid, String aname);
//
//	/**
//	 * 售后工单退款
//	 *
//	 * @param workOrder
//	 * @param aid
//	 * @param aname
//	 * @return
//	 */
//	int wxRefund(WorkOrder workOrder, Long aid, String aname);
//
//
//	/**
//	 * 余额退款
//	 *
//	 * @param orderRefundId
//	 * @param aid
//	 * @param aname
//	 * @return
//	 */
//	int balanceRefund(Long orderRefundId, Long aid, String aname);
//
	/**
	 * 售后工单余额退款
	 *
	 * @param workOrder
	 * @param aid
	 * @param aname
	 * @return
	 */
	int balanceRefund(WorkOrder workOrder, Long aid, String aname);
//
	/**
	 * 企业支付到个人零钱
	 *
	 * @param opendId
	 * @param amount
	 * @param realname
	 * @param applyNo
	 * @param desc
	 * @return
	 */
	String enterpriceToCustomer(String opendId, Double amount, String realname, String applyNo, String desc);
	/**
	 * 企业支付到个人零钱 站点开的小程序
	 *
	 * @param opendId
	 * @param amount
	 * @param realname
	 * @param applyNo
	 * @param desc
	 * @return
	 */
	String enterpriceToCustomerByCentre(String opendId, Double amount, String realname, String applyNo, String desc, Centre centre
            , String appOpenid);

	/**
	 * 聚合支付回调后的处理逻辑
	 *
	 * @param orderId
	 * @param payId
	 * @param outTradeNo
	 * @return
	 */
	int juhePay(Long orderId, String payId, String outTradeNo, Long procedureFee);
	/**
	 * 按地区计算角色佣金计算和存储
	 *
	 * @param mid            用户id
	 * @param orderId        订单id
	 * @param orderProductId 订单商品id
	 * @param orderMoney     金额
	 * @author liaozhaogui
	 * @date 2020/9/27 11:16
	 */
	void calculateCommissionByOrderArea(Long mid, Long orderId, Long orderProductId, BigDecimal orderMoney);
}
